package net.sos.playground;

//ToolbarFrame1.java
//A simple frame containing a "toolbar" made up of several java.awt.Button
//objects. We'll be converting the Buttons to JButtons in the ToolbarFrame2.java
//file.
//
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

public class ToolbarFrame2 extends JFrame {

   private static final long serialVersionUID = 1L;

   // This time, let's use JButtons!
   JButton cutButton, copyButton, pasteButton;
   JButton javaButton, macButton, motifButton, winButton;

   public ToolbarFrame2() {
      super("Toolbar Example (Swing)");
      setSize(450, 250);
      setResizable(false);

      addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
            System.exit(0);
         }
      });

      ActionListener printListener = new ActionListener() {
         public void actionPerformed(ActionEvent ae) {
            System.out.println(ae.getActionCommand());
         }
      };

      // JPanel works similarly to Panel, so we'll use it.
      JPanel toolbar = new JPanel();
      toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));

      cutButton = new JButton("Cut");
      cutButton.addActionListener(printListener);
      toolbar.add(cutButton);

      copyButton = new JButton("Copy");
      copyButton.addActionListener(printListener);
      toolbar.add(copyButton);

      pasteButton = new JButton("Paste");
      pasteButton.addActionListener(printListener);
      toolbar.add(pasteButton);

      getContentPane().add(toolbar, BorderLayout.NORTH);

      // Add the L&F controls.
      JPanel lnfPanel = new JPanel();
      LnFListener lnfListener = new LnFListener(this);
      macButton = new JButton("Mac");
      macButton.addActionListener(lnfListener);
      lnfPanel.add(macButton);
      javaButton = new JButton("Metal");
      javaButton.addActionListener(lnfListener);
      lnfPanel.add(javaButton);
      motifButton = new JButton("Motif");
      motifButton.addActionListener(lnfListener);
      lnfPanel.add(motifButton);
      winButton = new JButton("Windows");
      winButton.addActionListener(lnfListener);
      lnfPanel.add(winButton);
      add(lnfPanel, BorderLayout.SOUTH);
   }

   public static void main(String args[]) {
      ToolbarFrame2 tf2 = new ToolbarFrame2();
      tf2.setVisible(true);
   }

}

class LnFListener implements ActionListener {
   Frame frame;

   public LnFListener(Frame f) {
      frame = f;
   }

   public void actionPerformed(ActionEvent e) {
      String lnfName = null;
      if (e.getActionCommand().equals("Mac")) {
         lnfName = "com.apple.mrj.swing.MacLookAndFeel";
      } else if (e.getActionCommand().equals("Metal")) {
         lnfName = "javax.swing.plaf.metal.MetalLookAndFeel";
      } else if (e.getActionCommand().equals("Motif")) {
         lnfName = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
      } else if (e.getActionCommand().equals("Windows")) {
         lnfName = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
      } else {
         System.err.println("Unrecognized L&F request action: "
               + e.getActionCommand());
         return;
      }
      try {
         UIManager.setLookAndFeel(lnfName);
         SwingUtilities.updateComponentTreeUI(frame);
      } catch (UnsupportedLookAndFeelException ex1) {
         System.err.println("Unsupported LookAndFeel: " + lnfName);
      } catch (ClassNotFoundException ex2) {
         System.err.println("LookAndFeel class not found: " + lnfName);
      } catch (InstantiationException ex3) {
         System.err.println("Could not load LookAndFeel: " + lnfName);
      } catch (IllegalAccessException ex4) {
         System.err.println("Cannot use LookAndFeel: " + lnfName);
      }
   }
}
